﻿
Public Class frm_proveedor
    Dim check As New Validar
    Dim deshabilitarGuardar As Boolean = False
    Dim accesoDatos As New AccesoDatos("Proveedor")
    Dim accesoDatosCuentas As New AccesoDatos("Cuenta_Bancaria")


    Enum actualizar
        modificar
        ingresar
    End Enum

    Dim accion As actualizar


    Private Sub frm_proveedor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        cargarCombo(cmb_provincia, accesoDatos.leerTabla("Provincia"), "idProvincia", "nombre")
        'cargarCombo(cmb_ciudad, accesoDatos.leerTabla("Ciudad"), "idCiudad", "nombre")


        cargarCombo(cmb_bancoCuenta, accesoDatos.leerTabla("Banco"), "idBanco", "nombre")


        cargarGrilla(accesoDatos.leerProveedor())

        cmb_ciudad.SelectedIndex = -1
        cmb_provincia.SelectedIndex = -1


        txt_direccionProv.Enabled = False
        txt_idProv.Enabled = False
        txt_nombreCuenta.Enabled = False
        txt_nombreProv.Enabled = False
        txt_nroCuenta.Enabled = False
        cmb_bancoCuenta.Enabled = False
        cmb_ciudad.Enabled = False
        cmb_provincia.Enabled = False
        cmd_nuevoBanco.Enabled = False
        msk_tel.Enabled = False
        cmd_eliminarCuentaBancaria.Enabled = False
        cmd_agregarCuentaBancaria.Enabled = False
        cmd_cancelarCuenta.Enabled = False
        cmd_guardarCuenta.Enabled = False
        cmb_bancoCuenta.SelectedValue = -1

        cmd_nuevo.Focus()
       

    End Sub

    Private Sub cargarCombo(ByRef combo As ComboBox, ByRef tablaACargar As Data.DataTable, ByVal indice As String, ByVal campo As String)
        combo.DataSource = Nothing
        combo.DataSource = tablaACargar
        combo.ValueMember = indice
        combo.DisplayMember = campo
    End Sub


    Private Sub cargarGrilla(ByVal tablaACargar As Data.DataTable)
        dgv_proveedor.DataSource = tablaACargar
    End Sub

    Private Sub cargarGrillaCuenta(ByVal tablaACargar As Data.DataTable)
        dgv_cuentasBancarias.DataSource = tablaACargar
    End Sub



    ' Private Sub cmb_ciudadProveedor_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provProveedor.SelectedValueChanged
    '     cargarCombo(cmb_ciudadProveedor, accesoDatos.leerTabla("Ciudad c INNER JOIN Provincia p on (c.idProvincia=p.idProvincia)", "p.idProvincia = " & cmb_provProveedor.ValueMember), "idCiudad", "nombre")
    ' End Sub

    Private Sub cmd_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_guardar.Click
        If txt_nombreProv.Text <> "" Then
            If txt_direccionProv.Text <> "" Then
                If cmb_provincia.Text <> "" Then

                    Dim tabla As New Data.DataTable
                    Dim consulta As String
                    If MessageBox.Show("¿Está seguro que desea guardar los cambios?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
                        If accion = actualizar.ingresar Then
                            accesoDatos.insertar(True, generarStringValores())
                            MessageBox.Show("Proveedor guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                            If MessageBox.Show("¿Desea agregar una nueva cuenta bancaria?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then
                                cmd_agregarCuentaBancaria.Enabled = True
                                cmd_eliminarCuentaBancaria.Enabled = True
                                cmd_guardarCuenta.Enabled = True
                                cmd_cancelarCuenta.Enabled = True
                                cmd_nuevoBanco.Enabled = True
                                txt_nroCuenta.Focus()

                                consulta = "select MAX(idProveedor) from Proveedor"
                                tabla = accesoDatosCuentas.consulta(consulta)
                                txt_idProv.Text = tabla.Rows(0)(0)

                            End If

                        Else
                            accesoDatos.Modificar(True, generarStringValores(), generarRestriccionUpdate("idProveedor", txt_idProv))
                            MessageBox.Show("Proveedor guardado con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        End If
                        cargarGrilla(accesoDatos.leerProveedor())


                    Else
                        Exit Sub
                    End If
                Else
                    MessageBox.Show("Seleccione una Provincia.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                    cmb_provincia.Focus()

                End If
            Else
                MessageBox.Show("Ingrese una Direccion.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                txt_direccionProv.Focus()
            End If

        Else
            MessageBox.Show("Ingrese un Nombre.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_nombreProv.Focus()

        End If

    End Sub

    Private Function generarRestriccionUpdate(ByVal campo As String, ByRef valor As TextBox) As String
        Dim restriccion As String
        restriccion = campo & " = " & valor.Text
        Return restriccion


    End Function


    Private Function generarRestriccionUpdate(ByVal campo As String, ByRef valor As TextBox, ByVal campo2 As String, ByRef valor2 As String) As String
        Dim restriccion As String
        restriccion = campo & " = " & valor.Text
        restriccion &= " AND " & campo2 & " = " & valor2
        Return restriccion


    End Function


    Private Function generarStringValores() As String


        Dim valores As String = "nombre =" & txt_nombreProv.Text
        valores &= ", direccion =" & txt_direccionProv.Text
        valores &= ", telefono =" & msk_tel.Text
        valores &= ", idProvincia =" & cmb_provincia.SelectedValue
        valores &= ", idCiudad =" & cmb_ciudad.SelectedValue


        Return valores
    End Function

    Private Sub frm_prod_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If MessageBox.Show("¿Está seguro que desea salir?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            e.Cancel = False
            frm_menu.Show()
        Else
            e.Cancel = True
        End If
    End Sub

    Private Sub cmd_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_salir.Click
        Me.Close()
    End Sub

    Private Sub cmd_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_buscar.Click
        frm_buscarProve.ShowDialog()
    End Sub


    Public Sub buscarPorId(ByVal id As String)


        dgv_proveedor.DataSource = accesoDatos.consulta("select idProveedor as 'ID', nombre as 'proveedor' from Proveedor where idProveedor = " & id)
        If dgv_proveedor.Rows.Count = 0 Then
            MessageBox.Show("El ID de Proveedor no existe.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmd_buscar.Focus()

        End If
    End Sub


    Public Sub buscarPorNombre(ByVal nombre As String)
        dgv_proveedor.DataSource = accesoDatos.consulta("select idProveedor as 'ID', nombre as 'proveedor' from Proveedor where nombre LIKE UPPER('%" & nombre & "%')")
        If dgv_proveedor.Rows.Count = 0 Then
            MessageBox.Show("El nombre de Proveedor no existe.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            cmd_buscar.Focus()
        End If
    End Sub



    Private Sub cmd_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_nuevo.Click
        
        txt_direccionProv.Text = ""
        txt_nombreProv.Text = ""
        cmb_ciudad.DataSource = Nothing
        cmb_provincia.SelectedIndex = -1
        msk_tel.Text = ""
        txt_idProv.Text = ""
        cmb_bancoCuenta.SelectedIndex = -1
        txt_nombreCuenta.Text = ""
        txt_nroCuenta.Text = ""
        dgv_cuentasBancarias.DataSource = Nothing

        txt_idProv.Text = ""
        txt_direccionProv.Enabled = True
        txt_nombreCuenta.Enabled = True
        txt_nombreProv.Enabled = True
        txt_nroCuenta.Enabled = True
        cmb_bancoCuenta.Enabled = True
        cmb_ciudad.Enabled = False
        cmb_provincia.Enabled = True
        msk_tel.Enabled = True
        accion = actualizar.ingresar
        txt_nombreProv.Focus()
        txt_nombreCuenta.Text = ""
        txt_nroCuenta.Text = ""
        cmb_bancoCuenta.SelectedValue = -1
        txt_nombreCuenta.Enabled = False
        txt_nroCuenta.Enabled = False
        cmb_bancoCuenta.Enabled = False



    End Sub
    Private Sub dgv_producto_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgv_proveedor.DoubleClick

        txt_direccionProv.Enabled = True
        txt_nombreProv.Enabled = True
        cmb_ciudad.Enabled = True
        cmb_provincia.Enabled = True
        msk_tel.Enabled = True

        accion = actualizar.modificar
        Dim id As String = dgv_proveedor.CurrentRow.Cells(0).Value()
        Dim tabla As Data.DataTable = accesoDatos.obtenerProveedor("idProveedor", id)

        txt_idProv.Text = tabla.Rows(0)("idProveedor")
        txt_nombreProv.Text = tabla.Rows(0)("nombre")
        msk_tel.Text = tabla.Rows(0)("telefono")
        txt_direccionProv.Text = tabla.Rows(0)("direccion")
        cmb_ciudad.SelectedValue = tabla.Rows(0)("idCiudad")
        cmb_provincia.SelectedValue = tabla.Rows(0)("idProvincia")

        txt_idProv.Enabled = False
        cmd_eliminar.Enabled = True

        
        cmd_agregarCuentaBancaria.Enabled = True
        cmd_eliminarCuentaBancaria.Enabled = True
        dgv_cuentasBancarias.DataSource = accesoDatosCuentas.leerCuentasBancarias(txt_idProv.Text)



    End Sub

    Private Sub grb_cuentas_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grb_cuentas.Enter

    End Sub

    Private Sub cmd_cancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_cancelar.Click
        cmb_ciudad.DataSource = Nothing
        cmb_provincia.SelectedValue = -1
        txt_direccionProv.Text = ""
        txt_idProv.Text = ""
        txt_nombreProv.Text = ""
        txt_nroCuenta.Text = ""
        txt_nombreCuenta.Text = ""
        cmb_bancoCuenta.SelectedValue = -1
        msk_tel.Text = ""
        txt_nombreProv.Focus()
        cargarGrilla(accesoDatos.leerProveedor())
        cmb_ciudad.Enabled = False
        txt_nombreCuenta.Text = ""
        txt_nroCuenta.Text = ""
        cmb_bancoCuenta.SelectedValue = -1
        txt_nombreCuenta.Enabled = False
        txt_nroCuenta.Enabled = False
        cmb_bancoCuenta.Enabled = False

        dgv_cuentasBancarias.DataSource = ""

    End Sub

    Private Sub cmd_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_eliminar.Click
        If txt_idProv.Text = "" Then
            MessageBox.Show("Debe hacer doble click en el Proveedor que desea eliminar", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            If MessageBox.Show("¿Está seguro que desea eliminar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
                accesoDatos.eliminar("idProveedor", txt_idProv.Text)
                MessageBox.Show("¡Se elimino con exito!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                cargarGrilla(accesoDatos.leerProveedor())
            End If
        End If
    End Sub

    Private Sub cmd_agregarCuentaBancaria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_agregarCuentaBancaria.Click

        cmd_nuevoBanco.Enabled = True
        cmb_bancoCuenta.Enabled = True
        cmd_cancelarCuenta.Enabled = True
        cmd_guardarCuenta.Enabled = True
        txt_nombreCuenta.Enabled = True
        txt_nroCuenta.Enabled = True
        cmd_eliminarCuentaBancaria.Enabled = False
        accion = actualizar.ingresar
        txt_nroCuenta.Text = ""
        txt_nombreCuenta.Text = ""
        cmb_bancoCuenta.SelectedValue = -1
        txt_nroCuenta.Focus()




    End Sub

    Private Sub cmd_guardarCuenta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_guardarCuenta.Click

        If txt_nroCuenta.Text <> "" And IsNumeric(txt_nroCuenta.Text) Then

            If txt_nombreCuenta.Text <> "" Then
                If cmb_bancoCuenta.Text <> "" Then






                    If MessageBox.Show("¿Está seguro que desea guardar los cambios?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
                        If accion = actualizar.ingresar Then
                            accesoDatosCuentas.insertar(False, generarStringValoresCuentas())
                            MessageBox.Show("Cuenta Bancaria guardada con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                            txt_nombreCuenta.Text = ""
                            txt_nroCuenta.Text = ""
                            cmb_bancoCuenta.SelectedValue = -1
                            txt_nombreCuenta.Enabled = False
                            txt_nroCuenta.Enabled = False
                            cmb_bancoCuenta.Enabled = False
                            cmd_nuevoBanco.Enabled = False
                        Else
                            accesoDatosCuentas.Modificar(False, generarStringValoresCuentas(), generarRestriccionUpdate("nroCuenta", txt_nroCuenta, "idBanco", cmb_bancoCuenta.SelectedValue))
                            MessageBox.Show("Cuenta Bancaria guardada con éxito.", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Information)
                            txt_nombreCuenta.Text = ""
                            txt_nroCuenta.Text = ""
                            cmb_bancoCuenta.SelectedValue = -1
                            txt_nombreCuenta.Enabled = False
                            txt_nroCuenta.Enabled = False
                            cmb_bancoCuenta.Enabled = False
                            cmd_nuevoBanco.Enabled = False
                        End If
                        cargarGrillaCuenta(accesoDatosCuentas.leerCuentasBancarias(txt_idProv.Text))

                    Else
                        Exit Sub

                    End If
                Else
                    MessageBox.Show("Seleccione un Banco", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                    cmb_bancoCuenta.Focus()
                End If

            Else
                MessageBox.Show("Ingrese un nombre de cuenta.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
                txt_nombreCuenta.Focus()
                txt_nombreCuenta.Text = ""
            End If
        Else
            MessageBox.Show("Ingrese un numero de cuenta.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            txt_nroCuenta.Focus()
            txt_nroCuenta.Text = ""
        End If

     

    End Sub


    Private Function generarStringValoresCuentas() As String


        Dim valores As String = "nroCuenta =" & txt_nroCuenta.Text
        valores &= ", idBanco =" & cmb_bancoCuenta.SelectedValue
        valores &= ", idProveedor =" & txt_idProv.Text
        valores &= ", nombre =" & txt_nombreCuenta.Text




        Return valores
    End Function



    Private Sub dgv_cuentasBancarias_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dgv_cuentasBancarias.DoubleClick
        accion = actualizar.modificar
        Dim nroCuenta As String = dgv_cuentasBancarias.CurrentRow.Cells(0).Value()
        Dim banco As String = dgv_cuentasBancarias.CurrentRow.Cells(2).Value()
        Dim consul As String = "SELECT c.* FROM Cuenta_Bancaria c inner join Banco b on (c.idBanco=b.idBanco) where nroCuenta= " & nroCuenta & " and b.nombre='" & banco & "'"

        Dim tabla As New Data.DataTable
        tabla = accesoDatosCuentas.consulta(consul)

        txt_nroCuenta.Text = tabla.Rows(0)("nroCuenta")
        txt_nombreCuenta.Text = tabla.Rows(0)("nombre")
        cmb_bancoCuenta.SelectedValue = tabla.Rows(0)("idBanco")


        txt_idProv.Enabled = False
        cmd_eliminarCuentaBancaria.Enabled = True

        dgv_cuentasBancarias.DataSource = accesoDatosCuentas.leerCuentasBancarias(txt_idProv.Text)


    End Sub


    Private Sub cmd_eliminarCuentaBancaria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_eliminarCuentaBancaria.Click
        If txt_nroCuenta.Text = "" Then
            MessageBox.Show("Debe hacer doble click en la cuenta que desea eliminar", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            If MessageBox.Show("¿Está seguro que desea eliminar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = Windows.Forms.DialogResult.OK Then
                accesoDatosCuentas.eliminar("nroCuenta", txt_nroCuenta.Text, "idBanco", cmb_bancoCuenta.SelectedValue)
                MessageBox.Show("¡Se elimino con exito!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                cargarGrillaCuenta(accesoDatosCuentas.leerCuentasBancarias(txt_idProv.Text))
                txt_nroCuenta.Text = ""
                txt_nombreCuenta.Text = ""
                cmb_bancoCuenta.SelectedValue = -1
            End If
        End If
    End Sub

    Private Sub cmd_cancelarCuenta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_cancelarCuenta.Click
        txt_nombreCuenta.Text = ""
        txt_nroCuenta.Text = ""
        cmb_bancoCuenta.SelectedValue = -1
        txt_nroCuenta.Focus()
    End Sub

    Private Sub cmb_provincia_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provincia.SelectedIndexChanged
        If IsNumeric(cmb_provincia.SelectedValue) Then
            Dim tabla As New Data.DataTable
            tabla = accesoDatos.consulta("select * from Ciudad where idProvincia = " & cmb_provincia.SelectedValue)
            cargarCombo(cmb_ciudad, tabla, "idCiudad", "nombre")
            cmb_ciudad.Enabled = True
        End If
    End Sub

    Private Sub cmd_nuevoBanco_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_nuevoBanco.Click
        frm_bancos.ShowDialog()
    End Sub

    Public Sub cargarComboParaVolverDeFormBancos()
        cargarCombo(cmb_bancoCuenta, accesoDatos.leerTabla("Banco"), "idBanco", "nombre")
    End Sub
End Class


